package com.example.audiostreaming.implement;

import android.widget.Toast;

import com.example.audiostreaming.base.BaseApplication;
import com.example.audiostreaming.data.XimalayApi;
import com.example.audiostreaming.interfaces.IRecommendLogic;
import com.example.audiostreaming.interfaces.IRecommendViewCallback;
import com.example.audiostreaming.utils.UtilConstants;
import com.example.audiostreaming.utils.UtilLog;
import com.ximalaya.ting.android.opensdk.constants.DTransferConstants;
import com.ximalaya.ting.android.opensdk.datatrasfer.CommonRequest;
import com.ximalaya.ting.android.opensdk.datatrasfer.IDataCallBack;
import com.ximalaya.ting.android.opensdk.model.album.Album;
import com.ximalaya.ting.android.opensdk.model.album.GussLikeAlbumList;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 推荐界面逻辑实现层
 * 推荐界面相关逻辑接口类的实现类
 */
public class ImplRecommendLogic implements IRecommendLogic {
    private static final String TAG = "ImplRecommendLogic";

    private List<IRecommendViewCallback> mIRecommendViewCallbacks = new ArrayList<>();//回调过来的视图
    private List<Album> mCurrentRecommend=null;
    private List<Album> mRecommendAlbumListData;

    private ImplRecommendLogic(){}
    private static ImplRecommendLogic sInstanceImplRecommendLogic = null;
    /**
     * 懒汉式单例模式
     * @return 单例对象
     */
    public static ImplRecommendLogic getInstanceImplRecommendLogic(){
        if (sInstanceImplRecommendLogic ==null) {
            synchronized (ImplRecommendLogic.class){//防止多线程
                if (sInstanceImplRecommendLogic ==null) {
                    sInstanceImplRecommendLogic = new ImplRecommendLogic();
                }
            }
        }
        return sInstanceImplRecommendLogic;
    }

    /**
     * 获取当前的推荐专辑列表
     * @return 推荐专辑列表，使用之前要判空
     */
    public List<Album> getCurrentRecommend(){
        return mCurrentRecommend;
    }


    /**
     * 获取推荐专辑列表数据内容
     */
    @Override
    public void getRecommendAlbumListData() {

        handleLoadingRecommendAlbumListData();//处理推荐专辑列表数据结果正在加载
        if (mRecommendAlbumListData != null&&mRecommendAlbumListData.size()>0) {
            handleResultRecommendAlbumListData(mRecommendAlbumListData);
            return;
        }
        XimalayApi ximalayApi = XimalayApi.getXimalayApi();
        ximalayApi.getRecommendList( new IDataCallBack<GussLikeAlbumList>() {
            @Override
            //数据获取成功
            public void onSuccess(GussLikeAlbumList gussLikeAlbumList) {
                UtilLog.d(TAG,"线程名字 ==> "+Thread.currentThread().getName());
                if (gussLikeAlbumList != null) {
                    //获取推荐专辑列表数据
                    mRecommendAlbumListData = gussLikeAlbumList.getAlbumList();

//                    Toast.makeText(BaseApplication.getAppContext(),"推荐专辑列表数据获取成功", Toast.LENGTH_SHORT).show();
                    UtilLog.d(TAG,"推荐专辑列表数据获取成功 ==> "+"数据尺寸："+ mRecommendAlbumListData.size());
                    for (Album recommendAlbumListDatum : mRecommendAlbumListData) {
                        UtilLog.d(TAG,"推荐专辑列表数据获取成功 ==> "+"数据内容："+recommendAlbumListDatum);
                    }

                    //数据回来，更新UI布局
                    //upRecommendUI(recommendAlbumListData);
                    handleResultRecommendAlbumListData(mRecommendAlbumListData); //处理推荐专辑列表数据结果
                }
            }

            @Override
            //数据获取出错
            public void onError(int i, String s) {
                UtilLog.d(TAG, "错误码 ==> " + i);
                UtilLog.d(TAG, "错误信息 ==> " + s);
                handleErrorRecommendAlbumListData();//处理获取推荐专辑列表数据结果时发生错误
            }
        });
        //获取推荐专辑

    }

    @Override
    public void pullUpRecommendAlbumListData() {

    }

    @Override
    public void dropDownRecommendAlbumListData() {

    }

    @Override
    public void registerViewCallback(IRecommendViewCallback iRecommendViewCallback) {
        if (mIRecommendViewCallbacks != null&&!mIRecommendViewCallbacks.contains(iRecommendViewCallback)) {   //contains,包含
            mIRecommendViewCallbacks.add(iRecommendViewCallback);
        }
    }

    @Override
    public void unRegisterViewCallback(IRecommendViewCallback iRecommendViewCallback) {
        if (mIRecommendViewCallbacks != null) {
            mIRecommendViewCallbacks.remove(iRecommendViewCallback);
        }
    }








    /**
     * 处理推荐专辑列表数据结果
     * @param recommendAlbumListData
     */
    private void handleResultRecommendAlbumListData(List<Album> recommendAlbumListData) {
        if (recommendAlbumListData != null) {
            //recommendAlbumListData.clear();//测试，清空推荐专辑列表数据，让界面显示内容为空的界面视图
            if (recommendAlbumListData.size()==0) {
                //通知UI视图更新,推荐专辑列表数据结果为空，载入数据为空视图界面
                if (mIRecommendViewCallbacks != null) {
                    for (IRecommendViewCallback iRecommendViewCallback : mIRecommendViewCallbacks) {
                        iRecommendViewCallback.onEmptyRecommendAlbumListData();
                    }
                }
            }else {
                //通知UI视图更新,推荐专辑列表数据结果获取成功，设置相应推荐专辑列表数据结果
                if (mIRecommendViewCallbacks != null) {
                    for (IRecommendViewCallback iRecommendViewCallback : mIRecommendViewCallbacks) {
                        iRecommendViewCallback.onSetRecommendAlbumListData(recommendAlbumListData);
                    }
                    this.mCurrentRecommend = recommendAlbumListData;
                }
            }
        }

    }
    /**
     *处理推荐专辑列表数据结果正在加载
     */
    private void handleLoadingRecommendAlbumListData(){
        //通知UI视图更新，推荐专辑列表数据结果正在加载，载入正在加载视图界面
        if (mIRecommendViewCallbacks != null) {
            for (IRecommendViewCallback iRecommendViewCallback : mIRecommendViewCallbacks) {
                iRecommendViewCallback.onLoadingRecommendAlbumListData();
            }
        }
    }
    /**
     *处理获取推荐专辑列表数据结果时发生错误
     */
    private void handleErrorRecommendAlbumListData() {
        //通知UI视图更新，获取推荐专辑列表数据结果时出现错误，载入发生错误视图界面
        if (mIRecommendViewCallbacks != null) {
            for (IRecommendViewCallback iRecommendViewCallback : mIRecommendViewCallbacks) {
                iRecommendViewCallback.onNetWorkErrorRecommendAlbumListData();
            }
        }
    }


}
